<script>
import { initWxShare, getDefaultShareConfig, getCurrentShareConfig } from '@/utils/share';

export default {
  data() {
    return {
      defaultShareConfig: null
    };
  },
  async onLaunch() {
    await this.initWechatShare();
  },
  methods: {
    async initWechatShare() {
      // 获取默认分享配置
      this.defaultShareConfig = await getDefaultShareConfig();

      // 初始化时设置一次分享
      this.setWechatShare(this.defaultShareConfig);
    },
    async setWechatShare(config = {}) {
      try {
        console.log('App.vue: 开始设置微信分享配置', config);
        // 检查是否有页面级分享配置
        const pageShareConfig = await getCurrentShareConfig();

        // 合并配置，优先使用页面级配置
        const shareConfig = {
          ...this.defaultShareConfig,
          ...config,
          ...pageShareConfig, // 页面级配置优先级最高
        };
        
        // 从后端获取签名配置
        // 确保使用正确的安全域名www.stellargang.cn
        const safeDomain = 'www.stellargang.cn';
        const safeProtocol = 'https:';
        
        // 微信JS-SDK签名需要的URL是当前页面完整的URL（包括#及后面的部分）
        // 但在实际签名时，需要使用不带#后面部分的URL
        const currentUrl = window.location.href;
        const urlWithoutHash = currentUrl.split('#')[0];
        
        let safeUrl = '';
        
        // 强制使用安全域名，不依赖当前URL的解析结果
        try {
          // 解析当前URL，提取路径和参数
          const urlObj = new URL(urlWithoutHash);
          const pathAndParams = urlObj.pathname + urlObj.search;
          
          // 构建完整的安全URL
          safeUrl = `${safeProtocol}//${safeDomain}${pathAndParams}`;
        } catch (e) {
          console.error('URL解析错误:', e);
          // 如果URL解析失败，使用最基本的安全URL
          safeUrl = `${safeProtocol}//${safeDomain}/h5`;
        }
        
        // 再次确保safeUrl是完全正确的，添加额外的验证和修正
        safeUrl = safeUrl.replace(/^http:/, 'https:'); // 确保使用HTTPS
        
        // 更强大的域名修正逻辑，确保任何stellargang.cn变体都被替换为www版本
        if (safeUrl.includes('stellargang.cn') && !safeUrl.includes('www.stellargang.cn')) {
          safeUrl = safeUrl.replace('stellargang.cn', 'www.stellargang.cn');
        }
        
        // 添加额外的安全检查，确保URL完全符合预期
        if (!safeUrl.startsWith(`https://${safeDomain}`)) {
          console.warn('URL仍不符合安全要求，进行最后修正');
          const pathStartIndex = safeUrl.indexOf('/h5');
          if (pathStartIndex >= 0) {
            const pathAndParams = safeUrl.substring(pathStartIndex);
            safeUrl = `https://${safeDomain}${pathAndParams}`;
          } else {
            safeUrl = `https://${safeDomain}/h5`;
          }
        }
        
        // 记录URL修正过程
        console.log('原始URL:', currentUrl);
        console.log('修正后安全URL:', safeUrl);
        
        // 获取当前页面URL的快照，用于后续签名验证
        const currentUrlSnapshot = window.location.href;
        const urlWithoutHashSnapshot = currentUrlSnapshot.split('#')[0];
        
        // 构建请求参数，确保传递给后端的URL是100%正确的
        const requestData = {
          url: safeUrl
        };        
        uni.request({
          url: '/api/auth/wechat/signature',
          method: 'post',
          data: requestData,
          success: (res) => {
            const { appId, timestamp, nonceStr, signature } = res.data.data;
            // 微信JS-SDK已经在index.html中引入，直接使用
            if (!jWeixin || typeof jWeixin.config !== 'function') {
              console.error('微信JS-SDK未正确加载');
              return;
            }
            
            // 在配置JS-SDK之前，再次检查URL是否发生变化
            const currentUrlNow = window.location.href;
            const urlWithoutHashNow = currentUrlNow.split('#')[0];
            
            if (urlWithoutHashNow !== urlWithoutHashSnapshot) {
              console.warn('URL在签名请求期间发生变化，可能导致签名无效:', 
                '请求签名时URL:', urlWithoutHashSnapshot, 
                '当前URL:', urlWithoutHashNow);
              // 可以选择重新请求签名，或者继续使用当前签名
            }
            
            // 配置微信JS-SDK
            jWeixin.config({
              debug: false, // 生产环境建议关闭debug
              appId,
              timestamp,
              nonceStr,
              signature,
              jsApiList: [
                'updateAppMessageShareData',
                'updateTimelineShareData',
                'onMenuShareAppMessage',
                'onMenuShareTimeline',
                // 基础接口，确保能正常调用
                'checkJsApi',
                'onMenuShareQQ',
                'onMenuShareWeibo',
                'onMenuShareQZone'
              ]
            });

            // JS-SDK就绪后，直接使用share.js中已优化的applyShareConfig函数应用分享配置
            jWeixin.ready(() => {
              console.log('微信JS-SDK已准备就绪，通过share.js应用分享配置');
              
              // 检查是否有页面级分享配置中的自定义链接
              let finalShareLink = shareConfig.link || safeUrl;
              
              // 确保分享链接使用正确的安全域名和协议
              try {
                const linkUrl = new URL(finalShareLink);
                const pathAndHash = finalShareLink.substring(finalShareLink.indexOf('/h5'));
                // 构建保留路径和哈希的完整安全链接
                finalShareLink = `https://www.stellargang.cn${pathAndHash}`;
              } catch (e) {
                console.warn('分享链接解析失败，使用默认安全链接:', e);
              }
              
              // 最终分享配置
              const finalShareConfig = {
                ...shareConfig,
                link: finalShareLink // 使用保留完整路径和哈希的安全链接
              };
              
              console.log('最终分享配置:', finalShareConfig);
              
              // 直接调用share.js中的applyShareConfig函数，避免代码重复
              // 由于share.js中已实现完整的兼容性解决方案，这里不需要额外处理
              initWxShare(finalShareConfig); // 初始化微信分享并传入合并后的分享配置
              console.log('分享配置已应用:', finalShareConfig);
            });
            
            // 错误处理 - 增强错误日志和诊断信息
              jWeixin.error(function(res) {
                console.error('微信JS-SDK配置错误:', res);
                
                // 分析常见的配置错误原因
                if (res.errMsg.indexOf('config:invalid signature') !== -1) {
                  console.error('签名无效错误分析:', 
                    '1. 确认后端使用的URL与当前页面URL一致（不含#后面部分）',
                    '2. 检查后端签名算法是否正确（包括timestamp、nonceStr、jsapi_ticket等）',
                    '3. 确认安全域名已在微信公众平台正确配置',
                    '4. 请求签名时使用的URL:', safeUrl,
                    '5. 当前页面完整URL:', window.location.href,
                    '6. 向后端发送的请求参数:', requestData
                  );
                } else if (res.errMsg.indexOf('config:invalid url domain') !== -1) {
                  console.error('无效域名错误分析:', 
                    '1. 确认当前页面URL的域名已在微信公众平台配置',
                    '2. 检查域名格式是否正确（区分www和非www）',
                    '3. 当前页面完整URL:', window.location.href,
                    '4. 使用的安全域名:', safeDomain
                  );
                }
              });
          },
          fail: (err) => {
            console.error('获取微信签名失败:', err);
          }
        });
      } catch (error) {
        console.error('设置微信分享时发生错误:', error);
      }
    }
    }
};
</script>
